/**
 * 请你帮忙给从 1 到 n 的数设计排列方案，使得所有的「质数」
 * 都应该被放在「质数索引」（索引从 1 开始）上；你需要返回可能的方案总数。
 * @param {*} n 
 */
let numPrimeArrangements = function (n) {
  let temp0 = 0;
  let mod = 1000000007
  for (let i = 1; i <= n; i++) {
    if (isPrime(i))
      temp0++;
  }
  let res = 1;
  let temp1 = n - temp0;
  console.log(temp0, temp1)
  while (temp0 > 1 || temp1 > 1) {
    if (temp0 > 1) {
      res *= temp0;
      temp0--;
    }
    if (temp1 > 1) {
      res *= temp1;
      temp1--;
    }
    res %= mod;
  }
  console.log(res)
  return res;
};
function isPrime(n) {
  if (n == 1) {
    return false;
  }
  for (let i = 2; i * i <= n; i++) {
    if (n % i == 0)
      return false;
  }
  return true;
}
console.log(numPrimeArrangements(100));
console.log(numPrimeArrangements(5));
console.log(numPrimeArrangements(6));